/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package com.aaron.platform.service;

import com.aaron.platform.exceptions.ProjectNotExistException;
import com.aaron.platform.entity.FgysProject;
import com.aaron.platform.exceptions.ProjectActiveException;
import com.aaron.platform.exceptions.ProjectAllreadyExistException;
import java.util.List;

/**
 * interface of project
 * @author chenzhuohua
 */
public interface IProjectMgr {

    /**
     * 通过ID找项目
     * @param projectId 项目ID
     * @return 项目实例
     */
    public FgysProject findProjectById(Integer projectId);

    /**
     * 通过编号找项目
     * @param projectCode 项目编号
     * @return 项目实例
     */
    public FgysProject findProjectByCode(String projectCode);

    /**
     * 通过名字查询项目
     * @param projectName 项目名称
     * @return 项目实例列表
     */
    public List<FgysProject> findProjectByName(String projectName);

    /**
     * 增加一个项目信息
     * @param fgysProject 项目信息
     * @throws ProjectAllreadyExistException 项目已存在
     */
    public void addProject(FgysProject fgysProject) throws ProjectAllreadyExistException;

    /**
     * 更新项目信息
     * @param fgysProject 项目信息
     * @throws ProjectNotExistException 项目不存在
     * @throws ProjectAllreadyExistException 项目已经存在（不可以重名）
     */
    public void updateProject(FgysProject fgysProject) throws ProjectNotExistException, ProjectAllreadyExistException;

    /**
     * 删除一个项目
     * @param projectId 项目ID
     * @throws ProjectNotExistException 项目已不存在（之前就被删除）
     * @throws ProjectActiveException 项目处于活动状态（有对应的站点信息）
     */
    public void removeProject(Integer projectId) throws ProjectNotExistException, ProjectActiveException;
}
